package io.github.jianjianghui.groot.core.annotation;

/**
 * 幂等控制器
 *
 * @author <a href="https://www.github.com/jianjianghui">Jianghui Jian<a/>
 * @date 2021/8/27 - 14:28
 */
public interface GrootController {

    /**
     * 前置
     *
     * @param idempotent {@link Idempotent}
     */
    void before(Idempotent idempotent) throws InterruptedException;

    /**
     * 返回后置
     *
     * @param idempotent {@link Idempotent}
     */
    void afterReturning(Idempotent idempotent);

    /**
     * 异常后置
     *
     * @param idempotent {@link Idempotent}
     */
    void afterThrowing(Idempotent idempotent);
}
